﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BLL;
using DAL;
using System.Data;
using System.Reflection;


/* Namespace de servicios- permite  */

namespace BRL
{
    /* 
     * Esta capa es la encargada de interactuar con la BLL 
     * y devolverle a la Capa de presentacion los DataTables que esta necesita para llenar la interfaz.
     * 
     * En el camino inverso, toma de la interfaz los dato que se cargan en esta (string, int, date) y con estos
     * rellena los objetos
     */

    //Modulo 1: Centro Medico

    public class BRL_CentroMedico
    {
        BLL_CentroMedico objCentroMedico = new BLL_CentroMedico();
        DAL_CentroMedico dalCentroMedico = new DAL_CentroMedico();
        //DataTable dtCentroMedico = new DataTable();


        public bool insert()
        {
            return true;
        }

        public bool update()
        {
            return true;

        }

        public BLL_CentroMedico getCentroMedico()
        {
            return dalCentroMedico.obtenerPorId(1);
        }


        /*  public string getMision()
          {
              return objCentroMedico.mision;
          }

          public string getVision()
          {
              return objCentroMedico.vision;
          }*/

    }


    public class BRL_Valor
    {
        BLL_Valor objValor = new BLL_Valor();
        DAL_Valor dalValor = new DAL_Valor();

        public void insert(String nombre, String descripcion)
        {
            BLL_Valor objValor = new BLL_Valor(nombre, descripcion);

        }

        public bool update()
        {
            return true;

        }

        //public DataTable selectAll()
        //{
        //    DataTable dtValor = dalValor.obtenerTodo();
        //    return dtValor;
        //}

        public List<BLL_Valor> selectAll()
        {
            DataTable dtValor = dalValor.obtenerTodo();
            return (List<BLL_Valor>)soporte.ConvertTo<BLL_Valor>(dtValor);
        }
    }


    public class BRL_Novedad
    {
        BLL_Novedad objNovedad = new BLL_Novedad();
        DAL_Novedad dalNovedad = new DAL_Novedad();
        public bool insert()
        {
            return true;
        }

        public bool update()
        {
            return true;

        }

        public List<BLL_Novedad> selectAll()
        {
            DataTable dt = dalNovedad.obtenerTodo();

            return (List<BLL_Novedad>)soporte.ConvertTo<BLL_Novedad>(dt);
        }
    }

    //Modulo 2:Profesional

    public class BRL_Especialidad
    {
        BLL_Especialidad objEspecialidad = new BLL_Especialidad();
        DAL_Especialidad dalEspecialidad = new DAL_Especialidad();

        public bool insert()
        {


            return true;
        }


        public bool update()
        {
            return true;

        }

        public bool select()
        {
            return true;
            //dalEspecialidad.obtenerTodo(); 
        }

        public List<BLL_Especialidad> selectAll()
        {
            DataTable dt = dalEspecialidad.obtenerTodo();

            return (List<BLL_Especialidad>)soporte.ConvertTo<BLL_Especialidad>(dt);

        }
    }



    public class BRL_Profesional
    {
        BLL_Profesional objProfesional = new BLL_Profesional();
        DAL_Profesional dalProfesional = new DAL_Profesional();

        public bool insert()
        {
            return true;
        }


        public bool update()
        {
            return true;
        }

        public List<BLL_Profesional> selectAll()
        {
            DataTable dt = dalProfesional.obtenerTodo();

            return (List<BLL_Profesional>)soporte.ConvertTo<BLL_Profesional>(dt);
        }

    }


    /** CAMBIO 17/01/13  **/
    public class BRL_Horario
    {
        BLL_Horario objHorario = new BLL_Horario();
        DAL_Horario dalHorario = new DAL_Horario();
        List<BLL_Horario> horariosDeHoy;
        List<BLL_Horario> hoyXmanana; 
        List<BLL_Horario> hoyXtarde;

        public bool insert()
        {
            return true;
        }

        public bool update()
        {
            return true;

        }

        public List<BLL_Horario> selectAll()
        {
            DataTable dt = dalHorario.obtenerTodo();



            return (List<BLL_Horario>)soporte.ConvertTo<BLL_Horario>(dt);
        }


        public List<BLL_Horario> selectProfesionalesAtiendenHoy(string dia, int semanaNro)
        {
            DataTable dt = dalHorario.selectProfesionalesAtiendenHoy(dia, semanaNro);
            horariosDeHoy = new List<BLL_Horario>();

            foreach (DataRow row in dt.Rows)
            {
                BLL_Profesional profesional = new BLL_Profesional();
                BLL_Horario horario = new BLL_Horario();
                BLL_Especialidad especialidad = new BLL_Especialidad();

                profesional.id = Convert.ToInt32(row["idProfesional"]);
                profesional.apellido = row["apellido"].ToString();
                profesional.nombre = row["nombre"].ToString();
                especialidad.nombre = row["especialidad"].ToString();
                horario.dia = row["dia"].ToString();
                horario.turno = row["turno"].ToString();
                horario.Semana = row["semana"].ToString();
                horario.desde = row["desde"].ToString();
                horario.hasta = row["hasta"].ToString();

                profesional.especialidad = especialidad;
                horario.profesional = profesional;

                horariosDeHoy.Add(horario);
            }

            return horariosDeHoy;
        }

        public List<BLL_Horario> selectProfesionalesAtiendenXManana(string dia, int semanaNro)
        {
            if (hoyXmanana == null)
            {
                hoyXmanana = new List<BLL_Horario>();
                if (horariosDeHoy == null)
                {
                    horariosDeHoy = selectProfesionalesAtiendenHoy(dia, semanaNro);
                }
                foreach (BLL_Horario horario in horariosDeHoy)
                {
                    if (horario.turno == "Mañana")
                        hoyXmanana.Add(horario);
                }
            }
            return hoyXmanana;
        }

        public List<BLL_Horario> selectProfesionalesAtiendenXTarde(string dia, int semanaNro)
        {
            if (hoyXtarde == null)
            {
                hoyXtarde = new List<BLL_Horario>();
                if (horariosDeHoy == null)
                {
                    horariosDeHoy = selectProfesionalesAtiendenHoy(dia, semanaNro);
                }
                foreach (BLL_Horario horario in horariosDeHoy)
                {
                    if (horario.turno == "Tarde")
                        hoyXtarde.Add(horario);
                }
            }
            return hoyXtarde;
        }
    }


    //public class BRL_Semana
    //{
    //    BLL_Semana objSemana = new BLL_Semana();
    //    DAL_Semana dalSemana = new DAL_Semana();
    //    public bool insert()
    //    {
    //        return true;
    //    }

    //    public bool update()
    //    {
    //        return true;

    //    }

    //    public List<BLL_Semana> selectAll()
    //    {
    //        DataTable dt = dalSemana.obtenerTodo();

    //        return (List<BLL_Semana>)soporte.ConvertTo<BLL_Semana>(dt);
    //    }
    //}

    //public class BRL_DiaAtencion
    //{
    //    BLL_DiaAtencion objDiaAtencion = new BLL_DiaAtencion();
    //    DAL_DiaAtencion dalDiaAtencion = new DAL_DiaAtencion();
    //    public bool insert()
    //    {
    //        return true;
    //    }

    //    public bool update()
    //    {
    //        return true;

    //    }

    //    public List<BLL_DiaAtencion> selectAll()
    //    {
    //        DataTable dt = dalDiaAtencion.obtenerTodo();

    //        return (List<BLL_DiaAtencion>)soporte.ConvertTo<BLL_DiaAtencion>(dt);
    //    }
    //}

    /** CAMBIO 17/01/13  **/


    //Modulo 3:Paciente


    public class BRL_ObraSocial
    {
        BLL_ObraSocial objObraSocial = new BLL_ObraSocial();
        DAL_ObraSocial dalObraSocial = new DAL_ObraSocial();

        public bool insert()
        {
            return true;
        }


        public bool update()
        {
            return true;

        }

        public bool select()
        {
            return true;
			//return dalObraSocial.obtenerTodo();
            //dalObraSocial.obtenerTodo();
        }
    }


    //Modulo 4: Seguridad


    public class soporte
    {
        public static IList<T> ConvertTo<T>(DataTable table)
        {
            if (table == null)
                return null;

            List<DataRow> rowsList = new List<DataRow>();

            foreach (DataRow row in table.Rows)
                rowsList.Add(row);

            return ConvertTo<T>(rowsList);
        }

        public static IList<T> ConvertTo<T>(IList<DataRow> rowsList)
        {
            IList<T> list = null;

            if (rowsList != null)
            {
                list = new List<T>();

                foreach (DataRow row in rowsList)
                {
                    T item = CreateItem<T>(row);
                    list.Add(item);
                }
            }

            return list;
        }

        public static T CreateItem<T>(DataRow row)
        {
            T obj = default(T);
            if (row != null)
            {
                obj = Activator.CreateInstance<T>();

                foreach (DataColumn column in row.Table.Columns)
                {
                    PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName);
                    try
                    {
                        object value = row[column.ColumnName];
                        prop.SetValue(obj, value, null);
                    }
                    catch
                    {
                        // si no hay dato ingresado para una propiedad, no hacer nada

                        // throw;
                    }
                }
            }

            return obj;
        }
    }


}
